package JUC.线程池;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * [草稿！]
 * 10个任务
 * 上来
 * 01 start、234 入队、5 start(max) -> 其他的 6789 也是 同时异步 塞入start，都被拒绝抛弃掉了
 * max那个5 10s未用会销毁
 *
 * 015 同时完事 - 因为 异步
 *
 * 23 start 、 队 678 、4start
 * 234 同时完事
 */
public class UseThreadPoolExecutor {
    public static void main(String[] args) {
        useTPE();
    }
    private static void useTPE() {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                2, 3,
                10, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(3+4,true), // 1) +4 之后 无异常 可以正常关掉了
                Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()
        );

        for (int i = 0; i < 10; i++) {
            int finalI = i;
            threadPoolExecutor.execute(()->{
                System.out.println(Thread.currentThread().getName() + "开始" + finalI);
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "----结束"+ finalI);
            });
        }

        threadPoolExecutor.shutdown(); // 1) 有异常 关不掉
    }
}
/**
 * [线程就是这样 中间有点乱序 无所谓 -> 因为 同时进行的?]
 * pool-1-thread-1开始0
 * pool-1-thread-3开始5
 * pool-1-thread-2开始1
 * pool-1-thread-2----结束1
 * pool-1-thread-3----结束5
 * pool-1-thread-2开始2
 * pool-1-thread-1----结束0
 * pool-1-thread-1开始3
 * pool-1-thread-3开始4
 * pool-1-thread-2----结束2
 * pool-1-thread-3----结束4
 * pool-1-thread-1----结束3
 */